# -*- coding: utf-8 -*-

"""
Created on Fri Jun  8 18:43:24 2018

@author: Administrator
"""

import os
import matplotlib as mpl
#这一行代码是指保存图片，不在console里面显示。
mpl.use('Agg') 
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from  scipy.stats import pearsonr 
#%%
        
#%%
class Basics(object):
    underline = '_'
    linkline = '-'
    style = 'ticks'
    context = 'paper'
    palette = 'PRGn'
    svg = 'svg'
    dot_svg = '.svg'
#%%

class Boxplot(Basics):
    #作用原理：
    #参数说明：
    #参数说明：
    #返回值说明：
    #举例：
    #调用：
    #被调用：
    #bug：
    def __init__(self,coeff_pvalue_df,dvar,idvar_list,output_filepath):
        print('in the Boxplot')
        #作图
        sns.set(style=self.style)
        sns.set_context(self.context)
        boxplot = sns.boxplot(y=dvar,x=idvar_list,data=coeff_pvalue_df,palette=self.palette)
        sns.despine(offset=10,trim=True)
        boxplot.get_figure().savefig(output_filepath)
        boxplot.clear() #this is import when plot 2 graph at the same time.


#%%
class Barplot(Basics):

#    #作用原理：
#    #参数说明：
#    #参数说明：
#    #返回值说明：
#    #举例：
#    #调用：
#    #被调用：
#    #bug：
    def __init__(self,coeff_pvalue_df,column_name_list,x,y,output_dirpath,output_filename):
        print('in the Barplot')
        boxplot_file_str = os.sep + r'across_group_barplot_'
        #作图
        sns.set(style=self.style)
        sns.set_context(self.context)
        barplot = sns.barplot(x=column_name_list[x],y=column_name_list[y],data=coeff_pvalue_df,palette=self.palette)
        sns.despine(offset=10,trim=True)
        barplot.get_figure().savefig(output_dirpath+boxplot_file_str+output_filename)
        barplot.clear() #this is import when plot 2 graph at the same time.
               
#%%
        
class Juxtaposed_barplot(Basics):

#    #作用原理：
#    #参数说明：list0,list1是需要做柱状图的两列数，list0应为大的那一列。
#    #参数说明：label_list,分别对应两列数的名称。
#    #返回值说明：
#    #举例：
#    #调用：
#    #被调用： 
#    #bug：
    barwidth = 0.6
    color_code0 = '#1478B4'  #深蓝'#002060'
    color_code1 = '#FA7F14'  #浅蓝'#5B9BD5'
    subj = 'subjectID'
    step = 5
    def __init__(self,list0,list1,y_label,legend_list,output_filepath):
        print('in the Barplot')
        print('list0:',list0)
        print('list1:',list1)
        numb0,numb1 = len(list0),len(list1)
        if not numb0 == numb1:
          #column_name_list对应的df中列的元素数目必须相等，否则报错
          raise Exception('df[column_name_list[0]] and df[column_name_list[1]] must have same number of elements' + str(numb0) + '  ' + str(numb1))
        
        x_coordinate0 = np.arange(numb1) * 3 #确定bar在x上的坐标
        
        medi = np.arange(1,numb1,step=5)
        tick_label_list = [str(i) if i in medi else '' for i in np.arange(numb1) + 1]

        #作图
        plt.style.use('ggplot') #使用ggplot的特点作图
        fig = plt.figure(figsize=(6,3))
        ax = fig.add_subplot(111)
        ax.bar(x_coordinate0, list0, width=self.barwidth, label=legend_list[0],color=self.color_code0)
        ax.bar(x_coordinate0+self.barwidth, list1, width=self.barwidth, label=legend_list[1],\
               color=self.color_code1)
        ax.set_xticks(x_coordinate0 + self.barwidth/2)
        ax.set_xticklabels(labels=tick_label_list)
        plt.xlabel(self.subj)
        plt.ylabel(y_label)
        ax.tick_params(length=0)
        plt.legend()
        plt.tight_layout(pad=0.5)#调整图周围的空白
        fig.savefig(output_filepath,dpi=1000)


#%%